home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / presto / prest1_0.lha / Tests / sos / set.C < prev    next >
C/C++ Source or Header  |  1991-12-11  |  911b  |  78 lines

  1. #include "presto.h"
  2. #include "set.h"
  3.  
  4.  
  5. Set::Set()
  6. {
  7.     int i;
  8.  
  9.     for (i = 0; i < (MAXSIZE >> 5); i++)
  10.         s_members[i] = 0;
  11.     s_total = 0;
  12. }
  13.  
  14. Set::~Set()
  15. {}
  16.  
  17. Set*
  18. Set::clone()
  19. {
  20.     Set *newset = new Set;
  21.     int i;
  22.  
  23.     for (i = 0; i < (MAXSIZE >> 5); i++)
  24.         newset->s_members[i] = s_members[i];
  25.     newset->s_total = s_total;
  26.     return(newset);
  27. }
  28.  
  29. int
  30. Set::ismember(int e)
  31. {
  32.     int i = e >> 5;
  33.     int b = e & 0x1f;
  34.  
  35.     if (e >= MAXSIZE)
  36.         return 0;
  37.     if ((s_members[i] >> b) & 1)
  38.         return 1;
  39.     else
  40.         return 0;
  41. }
  42.  
  43. //
  44. // Include and remove always assume that the argument is valid.
  45. //
  46.  
  47. void
  48. Set::include(int m)
  49. {
  50.  
  51.     if (!ismember(m)) {
  52.         s_total += m;
  53.         s_members[m>>5] |= (1 << (m & 0x1f));
  54.     }
  55. }
  56.  
  57.  
  58. void
  59. Set::remove(int m)
  60. {
  61.     if (ismember(m)) {
  62.         s_members[m>>5] &= ~(1 << (m & 0x1f));
  63.         s_total -= m;
  64.     }
  65. }
  66.  
  67. void
  68. Set::print(ostream &s)
  69. {
  70.     int i;
  71.  
  72.     for(i = 0; i < MAXSIZE; i++) {
  73.         if (ismember(i))
  74.             s << form("%d ", i);
  75.     }
  76.     s << "\n";
  77. }
  78.